home *** CD-ROM | disk | FTP | other *** search
- #ifndef APACHE_MULTITHREAD_H
- #define APACHE_MULTITHREAD_H
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #define MULTI_OK (0)
- #define MULTI_TIMEOUT (1)
- #define MULTI_ERR (2)
-
- typedef void mutex;
- typedef void semaphore;
- typedef void thread;
- typedef void event;
-
- /*
- * Ambarish: Need to do the right stuff on multi-threaded unix
- * I believe this is terribly ugly
- */
- #ifdef MULTITHREAD
- #define APACHE_TLS __declspec( thread )
-
- thread *create_thread(void (thread_fn) (void *thread_arg), void *thread_arg);
- int kill_thread(thread *thread_id);
- int await_thread(thread *thread_id, int sec_to_wait);
- void exit_thread(int status);
- void free_thread(thread *thread_id);
-
- API_EXPORT(mutex *) ap_create_mutex(char *name);
- API_EXPORT(mutex *) ap_open_mutex(char *name);
- API_EXPORT(int) ap_acquire_mutex(mutex *mutex_id);
- API_EXPORT(int) ap_release_mutex(mutex *mutex_id);
- API_EXPORT(void) ap_destroy_mutex(mutex *mutex_id);
-
- semaphore *create_semaphore(int initial);
- int acquire_semaphore(semaphore *semaphore_id);
- int release_semaphore(semaphore *semaphore_id);
- void destroy_semaphore(semaphore *semaphore_id);
-
- event *create_event(int manual, int initial, char *name);
- event *open_event(char *name);
- int acquire_event(event *event_id);
- int set_event(event *event_id);
- int reset_event(event *event_id);
- void destroy_event(event *event_id);
-
- #else /* ndef MULTITHREAD */
-
- #define APACHE_TLS
- /* Only define the ones actually used, for now */
- extern void *ap_dummy_mutex;
-
- #define ap_create_mutex(name) ((mutex *)ap_dummy_mutex)
- #define ap_acquire_mutex(mutex_id) ((int)MULTI_OK)
- #define ap_release_mutex(mutex_id) ((int)MULTI_OK)
- #define ap_destroy_mutex(mutex_id) (0)
-
- #endif /* ndef MULTITHREAD */
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* !APACHE_MULTITHREAD_H */
-